package com.qidianit.mes.pro.service;

import com.github.pagehelper.PageInfo;
import com.qidianit.mes.pojo.Result;
import com.qidianit.mes.pojo.pro.Workflow;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 工艺流程服务接口
 * 处理工艺流程的查询、新增、编辑、删除等核心业务操作
 */
public interface WorkflowService {
    /**
     * 通过物料编号查询工艺流程，同时查询出这个工艺的所有工序列表
     * @param code
     * @return
     */
    Result<List<Workflow>> selectListByMaterialCode(String code);


    /**
     * 根据条件查询工艺流程列表，支持分页
     * 条件包括：工艺流程编号（精确）、工艺流程名称（模糊）、状态（启用/禁用）
     * @param workflow 工艺流程查询条件（封装查询参数）
     * @param pageNum 页码（默认从1开始）
     * @param pageSize 每页条数（默认10条）
     * @return 分页查询结果（包含工艺流程列表、总条数、总页数等信息）
     */
    Result<PageInfo<Workflow>> selectList(Workflow workflow, int pageNum, int pageSize);

    /**
     * 根据工艺流程编号精确查询单个工艺流程
     * 编号唯一，用于精准定位某一工艺流程（如详情查看、重复校验）
     * @param workflowCode 工艺流程编号
     * @return 单个工艺流程详情（若不存在则返回空结果）
     */
    Result<Workflow> selectByCode(String workflowCode);

    /**
     * 新增工艺流程
     * 需校验编号唯一性、必填字段（如名称、状态）等业务规则
     * @param workflow 工艺流程信息（不含ID，ID由数据库自增生成）
     * @return 新增操作结果（成功/失败信息）
     */
    Result saveWorkflow(Workflow workflow);

    /**
     * 根据ID编辑工艺流程信息
     * 仅允许编辑未删除的工艺流程，需校验编号唯一性（若修改编号）
     * @param workflow 工艺流程信息（含ID，用于定位待编辑记录）
     * @return 编辑操作结果（成功/失败信息）
     */
    Result updateById(Workflow workflow);

    /**
     * 根据ID逻辑删除单个工艺流程
     * 不物理删除数据，仅将deleteFlag设为1（已删除），保留数据痕迹
     * @param id 工艺流程ID
     * @return 删除操作结果（成功/失败信息）
     */
    Result deleteById(Long id);

    /**
     * 根据ID数组批量逻辑删除工艺流程
     * 批量操作提升效率，适用于多选删除场景，同样仅修改deleteFlag状态
     * @param ids 工艺流程ID数组（需至少包含一个ID）
     * @return 批量删除操作结果（成功删除数量、失败信息等）
     */
    Result batchDelete(@Param("ids") Long[] ids);
}